home *** CD-ROM | disk | FTP | other *** search
/ Windows Expert / Windows Expert.iso / windownt / wvnsrc75.zip / WVMAIL.C < prev    next >
C/C++ Source or Header  |  1992-10-26  |  7KB  |  281 lines

  1. /*--- WVMAIL.C ------------------------------------------------------------
  2.  *
  3.  *    This file contains the window procedure for the windows
  4.  *    used to edit outgoing mail messages.
  5.  *
  6.  *    Mark Riordan   11 June 1991
  7.  */
  8.  
  9. #include "windows.h"
  10. #include "wvglob.h"
  11. #include "winvn.h"
  12. #ifndef MAC
  13. #include "winundoc.h"
  14. #endif
  15.  
  16. long FAR PASCAL 
  17. WinVnMailWndProc (hWnd, message, wParam, lParam)
  18.      HWND hWnd;
  19.      unsigned message;
  20.      WPARAM wParam;
  21.      LPARAM lParam;
  22. {
  23.   HMENU hMenu;
  24.  
  25.   PAINTSTRUCT ps;        /* paint structure          */
  26.  
  27.   HDC hDC;            /* handle to display context */
  28.   HWND hWndMail, hWndMailEdit;
  29. #ifdef MAC
  30.   TEHandle TEH;
  31.   Rect myClipRect;
  32. #endif
  33.   HDC hDCView;
  34.   int ih, j;
  35.   int found;
  36.   int imemo;
  37.   TypDoc *MyDoc;
  38.   char mesbuf[348];        /*** debug */
  39.  
  40.   for (ih = 0, found = FALSE; !found && ih < MAXMAILWNDS; ih++)
  41.     {
  42.       if (hWndMails[ih] == hWnd)
  43.     {
  44. #ifndef MAC
  45.       hWndMailEdit = hWndMailEdits[ih];
  46. #else
  47.       TEH = TEHMails[ih];
  48. #endif
  49.       found = TRUE;
  50.       break;
  51.     }
  52.     }
  53.   if (!found && message == WM_CREATE)
  54.     {
  55.       for (ih = 0; !found && ih < MAXVIEWS; ih++)
  56.     {
  57.       if (!hWndMails[ih])
  58.         {
  59.           found = TRUE;
  60.           hWndMails[ih] = hWnd;
  61.           break;
  62.         }
  63.     }
  64.     }
  65. #if 0
  66.   if (!found)
  67.     {
  68.       MessageBox (hWnd, "Can't find Mail hWnd", "Error!", MB_OK | MB_ICONHAND);
  69.       DestroyWindow (hWnd);
  70.       return (NULL);        /*** ? */
  71.     }
  72. #endif
  73.  
  74.   switch (message)
  75.     {
  76.     case WM_SYSCOMMAND:
  77.       return (DefWindowProc (hWnd, message, wParam, lParam));
  78.  
  79.     case WM_CREATE:
  80. #ifndef MAC
  81.       hWndMailEdit = hWndMailEdits[ih] = CreateWindow ("edit", (char *) NULL,
  82.          WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | WS_BORDER
  83.                           | ES_LEFT | ES_MULTILINE |
  84.                          ES_AUTOHSCROLL | ES_AUTOVSCROLL
  85.                                ,
  86.                                0, 0, 0, 0,
  87.                          hWnd, EDITID, hInst, NULL);
  88.       sprintf (mesbuf, "hWndMailEdits[%d] = %5d\r\n       ", ih, hWndMailEdits[ih]);
  89.       /*   MessageBox(hWnd,mesbuf,"Edit Window Results",MB_OK|MB_ICONASTERISK); */
  90.       SetWindowText (hWndMailEdits[ih], mesbuf);
  91. #endif
  92. #if 0
  93.       {
  94.     long int freeHeap = FreeMem ();
  95.     long int biggestBlock = MaxBlock ();
  96.     long int freeStack = StackSpace ();
  97.     long int el;
  98.  
  99.     el = 0;
  100.     sprintf (mesbuf, "FreeMem=%ld  MaxBlock=%ld  StackSpace=%ld",
  101.          freeHeap, biggestBlock, freeStack);
  102.     MessageBox (hWnd, mesbuf, "Available Memory", MB_OK);
  103.       }
  104. #endif
  105.       CreatePostingText (MailDoc, hWnd, hWndMailEdit, DOCTYPE_MAIL);
  106.       /*   SetFocus(hWndEdits[ih]);  */
  107.       break;
  108.  
  109.     case WM_SIZE:
  110. #ifndef MAC
  111.       MoveWindow (hWndMailEdit, 0, 0, LOWORD (lParam),
  112.           HIWORD (lParam), TRUE);
  113. #endif
  114.       break;
  115.  
  116.     case WM_SETFOCUS:
  117.       SetFocus (hWndMailEdit);
  118.       break;
  119.  
  120.     case WM_KEYDOWN:
  121.       if (wParam == VK_F6)
  122.     {
  123.       NextWindow (&(MailDocs[ih]));
  124.     }
  125.       break;
  126.  
  127. #ifdef MAC
  128.     case WM_PAINT:
  129.       if (TEH)
  130.     {
  131.       myClipRect = hWnd->portRect;
  132.       myClipRect.right -= SBarWidth;
  133.       myClipRect.bottom -= SBarWidth;
  134.       (*TEH)->viewRect = myClipRect;
  135.       TEUpdate (&myClipRect, TEH);
  136.     }
  137.       break;
  138.  
  139. #endif
  140.  
  141.     case WM_COMMAND:
  142.       switch (wParam)
  143.     {
  144.     case IDM_CANCEL:
  145.     case IDV_EXIT:
  146.       DestroyWindow (hWnd);
  147.       break;
  148.  
  149.     case IDM_POST:
  150.       StartMail (ih);
  151.       break;
  152.  
  153.     case IDM_UNDO:
  154.       SendMessage (hWndMailEdit, WM_UNDO, 0, 0L);
  155.       break;
  156.  
  157.     case IDM_CUT:
  158.       SendMessage (hWndMailEdit, WM_CUT, 0, 0L);
  159.       break;
  160.  
  161.     case IDM_COPY:
  162.       SendMessage (hWndMailEdit, WM_COPY, 0, 0L);
  163.       break;
  164.  
  165.     case IDM_PASTE:
  166.       SendMessage (hWndMailEdit, WM_PASTE, 0, 0L);
  167.       break;
  168.  
  169.     case IDM_CLEAR:
  170.       SendMessage (hWndMailEdit, WM_CLEAR, 0, 0L);
  171.       break;
  172.  
  173.     case IDM_SELALL:
  174.       SendMessage (hWndMailEdit, EM_SETSEL, 0,
  175.                MAKELONG (0, 32767));
  176.       break;
  177.     }
  178.       break;
  179.  
  180.  
  181.     case WM_DESTROY:
  182.       hWndMails[ih] = 0;
  183. #ifndef MAC
  184.       hWndMailEdits[ih] = 0;
  185. #else
  186.       TEDispose (TEHMails[ih]);
  187.       TEHMails[ih] = (TEHandle) 0;
  188.       TEHCurrent = 0;
  189. #endif
  190.       break;
  191.  
  192.  
  193.     default:
  194.       return (DefWindowProc (hWnd, message, wParam, lParam));
  195.     }
  196.   return (0L);
  197. }
  198.  
  199. /*--- function StartMail ----------------------------------------------
  200.  *
  201.  *    Start the Mailing procedure for an article that has been created
  202.  *    by the user.
  203.  *
  204.  *    Entry    ih    is the index into hWndMailEdits of the child
  205.  *                   edit window containing the article.
  206.  */
  207. BOOL
  208. StartMail (ih)
  209.      int ih;
  210. {
  211.   BOOL found;
  212.   BOOL MailOK = FALSE, got_To = FALSE;
  213.   char outline[MAXOUTLINE], cmdline[MAXOUTLINE];
  214.   char *editptr, *outptr, *cptr;
  215.   HANDLE hEditBuffer;
  216.   HWND hWndMailEdit = hWndMailEdits[ih];
  217.   int linelen;
  218.  
  219.   if (CommBusy)
  220.     {
  221.       MessageBox (hWndMails[ih], "Sorry, I am already busy retrieving information from the server.\n\
  222. Try again in a little while.", "Can't mail message right now", MB_OK | MB_ICONASTERISK);
  223.     }
  224.   else
  225.     {
  226.       CommLinePtr = CommLineIn;
  227.       CommBusy = TRUE;
  228.       CommState = ST_MAIL_WAIT_PERMISSION;
  229.       CommDoc = &(MailDocs[ih]);
  230.  
  231.       /* Create XMAIL command.  We need to extract the "To:" line
  232.        * in order to find the recipient for the command.
  233.        */
  234. #ifndef MAC
  235.       hEditBuffer = (HANDLE) SendMessage (hWndMailEdit, EM_GETHANDLE, 0, 0L);
  236.       editptr = LocalLock (hEditBuffer);
  237. #else
  238.       hEditBuffer = TEGetText (TEH);
  239.       editptr = LocalLock (hEditBuffer);
  240.       editptr[(*TEH)->teLength] = '\0';
  241.  
  242. #ifdef MRRBUG
  243.       sprintf (outline, "MailText after TEGetText, editptr=%.30s", editptr);
  244.       MessageBox ((HWND) 0, outline, "", MB_OK);
  245. #endif
  246.  
  247. #endif
  248.       while (!got_To && *editptr)
  249.     {
  250.       for (linelen = 0, outptr = outline; *editptr && *editptr != '\r' &&
  251.            linelen < MAXOUTLINE; linelen++)
  252.         *(outptr++) = *(editptr++);
  253.       *outptr = '\0';
  254.       if (CompareStringNoCase (outline, "To: ", 4) == 0)
  255.         {
  256.           got_To = TRUE;
  257.         }
  258.     }
  259.       LocalUnlock (hEditBuffer);
  260.  
  261.       if (!got_To)
  262.     {
  263.       MessageBox (hWndMails[ih], "Fill in the \"To:\" line", "Need a recipient",
  264.               MB_OK | MB_ICONHAND);
  265.     }
  266.       else
  267.     {
  268.       outptr = outline;
  269.       NextToken (&outptr);
  270.       strcpy (cmdline, "xMail ");
  271.       for (cptr = cmdline + strlen (cmdline);
  272.            *outptr > ' ' && cptr - cmdline < MAXOUTLINE;
  273.            *(cptr++) = *(outptr++));
  274.       *cptr = '\0';
  275.       PutCommLine (cmdline, strlen (cmdline));
  276.       MailOK = TRUE;
  277.     }
  278.     }
  279.   return (MailOK);
  280. }
  281.